home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2006 December
/
PCWorld_2006-12_cd.bin
/
v cisle
/
robocopy
/
rktools.exe
/
RCDATA
/
CABINET
/
rktools.msi
/
portconv.vbs
< prev
next >
Wrap
Text File
|
2003-04-18
|
14KB
|
601 lines
'----------------------------------------------------------------------
'
' Copyright (c) Microsoft Corporation 1998-2003
' All Rights Reserved
'
' Abstract:
'
' portconv.vbs - Script for converting lpr ports to tcp ports
'
' Usage:
' portconv [-ag?][-p port][-c source server][-i ip][-d destination server]
'
' Examples:
' portconv -g -i 1.2.3.4
'
'----------------------------------------------------------------------
option explicit
'
' Debugging trace flags, to enable debug output trace message
' change gDebugFlag to true.
'
const kDebugTrace = 1
const kDebugError = 2
dim gDebugFlag
gDebugFlag = false
'
' Messages to be displayed if the scripting host is not cscript
'
const kMessage1 = "Please run this script using CScript."
const kMessage2 = "This can be achieved by"
const kMessage3 = "1. Using ""CScript script.vbs arguments"" or"
const kMessage4 = "2. Changing the default Windows Scripting Host to CScript"
const kMessage5 = " using ""CScript //H:CScript //S"" and running the script "
const kMessage6 = " ""script.vbs arguments""."
'
' Operation action values.
'
const kActionUnknown = 0
const kActionAdd = 1
const kActionGet = 2
const kActionConvertAll = 3
const kErrorSuccess = 0
const KErrorFailure = 1
'
' Port Types
'
const kTcpRaw = 1
const kTcpLPr = 2
const kLocal = 3
const kLprMon = 5
const kHPdlc = 7
const kUnknown = 8
'
' The only supported conversion is from lpr mon to tcp
'
const kLprToTcp = 1
main
'
' Main execution starts here
'
sub main
dim iAction
dim iRetval
dim strIPAddress
dim strSourceServer
dim strDestServer
dim strPort
'
' Abort if the host is not cscript
'
if not IsHostCscript() then
call wscript.echo(kMessage1 & vbCRLF & kMessage2 & vbCRLF & _
kMessage3 & vbCRLF & kMessage4 & vbCRLF & _
kMessage5 & vbCRLF & kMessage6 & vbCRLF)
wscript.quit
end if
iRetval = ParseCommandLine(iAction, strSourceServer, strDestServer, strPort, strIPAddress)
if iRetval = kErrorSuccess then
select case iAction
case kActionAdd
iRetval = AddEquivalentTCPPort(strSourceServer, strDestServer, strPort)
case kActionGet
iRetval = GetEquivalentTCPSettings(strIPAddress)
case kActionConvertAll
iRetval = ConvertAll(strSourceServer, strDestServer)
case else
Usage(true)
end select
end if
end sub
'
' Get the TCP equivalent of a lpr mon port
'
function GetEquivalentTCPSettings(strIPAddress)
on error resume next
DebugPrint kDebugTrace, "In GetEquivalentTCPSettings"
dim oMaster
dim oPort
dim iResult
set oMaster = CreateObject("PrintMaster.PrintMaster.1")
set oPort = CreateObject("Port.Port.1")
oPort.HostAddress = strIPAddress
'
' oPort will contain the settings of the device
'
oMaster.PortConversion oPort, kLprToTcp
if Err.Number <> kErrorSuccess then
wscript.echo "Error converting the port, error 0x" & _
Hex(Err.Number) & ". " & Err.Description
iResult = kErrorFailure
else
'
' Check if the device responded
'
if oPort.DeviceType <> "" then
wscript.echo "DeviceType " & oPort.DeviceType
else
wscript.echo "The device did not respond. The default port settings will be displayed"
end if
wscript.echo "Name " & oPort.PortName
wscript.echo "HostAddress " & oPort.HostAddress
if oPort.PortType = kTcpRaw then
wscript.echo "Protocol RAW"
wscript.echo "PortNumber " & oPort.PortNumber
else
wscript.echo "Protocol LPR"
wscript.echo "Queue " & oPort.QueueName
end if
if oPort.SNMP then
wscript.echo "SNMP Enabled"
else
wscript.echo "SNMP Disabled"
end if
if oPort.DoubleSpool then
wscript.echo "DoubleSpool Yes"
else
wscript.echo "DoubleSpool No"
end if
iResult = kErrrorSuccess
end if
GetEquivalentTCPSettings = iResult
end function
'
' Add an equivalent tcp port. strSource is the server where strPort is on.
' If strPort is a lpr mon port, a corresponding tcp port will be added to
' the destination server strDestServer
'
function AddEquivalentTCPPort(strSourceServer, strDestServer, strPort)
on error resume next
DebugPrint kDebugTrace, "In AddEquivalentTCPPort"
dim oMaster
dim oPort
dim iResult
iResult = kErrorFailure
set oMaster = CreateObject("PrintMaster.PrintMaster.1")
set oPort = CreateObject("Port.Port.1")
'
' Get the configuration of the port to be converted
'
oMaster.PortGet strSourceServer, strPort, oPort
if Err.Number <> kErrorSuccess then
wscript.echo "Unable to get the configuration for the port """ & strPort & _
""", error 0x" & Hex( Err.Number ) & " " & Err.Description
else
'
' Check if it is lpr mon port
'
if oPort.PortType = kLprMon then
'
' Attempt to get the equivalent tcp port
'
oMaster.PortConversion oPort, kLprToTcp
if Err.Number <> kErrorSuccess then
wscript.echo "Unable to convert the port, error: 0x" & Hex(Err.Number) _
& " " & Err.Description
else
'
' An empty DeviceType means the device did not respond or couldn't be identified
'
if oPort.DeviceType = "" then
wscript.echo "The device did not respond. A port with default settings will be added"
end if
oPort.ServerName = strDestServer
'
' Add the equivalent port
'
oMaster.PortAdd oPort
if Err.Number = kErrorSuccess then
wscript.echo "Success adding the TCP port: """ & oPort.PortName & """ on server " & strDestServer
iResult = kErrorSuccess
else
wscript.echo "Unable to add the TCP port, error: 0x" & _
Hex(Err.Number) & ". " & Err.Description
end if
end if
else
wscript.echo "Error: This port is not lpr mon"
end if
end if
AddEquivalentTCPPort = iResult
end function
'
' Convert all lpr mon ports from the source server onto the destination server
'
function ConvertAll(strSourceServer, strDestServer)
on error resume next
DebugPrint kDebugTrace, "In ConvertAll"
dim oMaster
dim oPort
dim iTotal
dim iLprCount
dim iTcpCount
'
' Total number of ports on the source server
'
iTotal = 0
'
' Total number of lpr mon ports on the source server
'
iLprCount = 0
'
' Total number of equivalent tcp ports added on the destination server
'
iTcpCount = 0
set oMaster = CreateObject("PrintMaster.PrintMaster.1")
for each oPort in oMaster.Ports(strSourceServer)
if Err.Number = kErrorSuccess then
iTotal = iTotal + 1
if oPort.PortType = kLprMon then
iLprCount = iLprCount + 1
oMaster.PortConversion oPort, kLprToTcp
if Err.Number = kErrorSuccess then
'
' Check if the device is responding
'
if oPort.DeviceType = "" then
wscript.echo "The device " & oPort.HostAddress & _
" did not respond. Adding a port with default settings"
'
' Enable LPR byte counting
'
oPort.DoubleSpool = true
else
wscript.echo oPort.HostAddress & " is " & oPort.DeviceType
end if
oPort.ServerName = strDestServer
'
' Add the equivalent port
'
oMaster.PortAdd oPort
if Err.Number = kErrorSuccess then
iTcpCount = iTcpCount + 1
wscript.echo oPort.PortName & " was added"
else
wscript.echo "Unable to add """ & oPort.PortName & """, error: 0x" _
& Hex(Err.Number) & ". " & Err.Description
Err.Clear
end if
else
wscript.echo "Unable to convert port """ & oPort.PortName & """ , error: 0x" _
& Hex(Err.Number) & ". " & Err.Description
Err.Clear
end if
end if
else
wscript.echo "Unable to list ports, error: 0x" & Hex(Err.Number) & ". " & Err.Description
ConvertAll = kErrorFailure
exit function
end if
next
wscript.echo "Number of ports on the source server " & iTotal
wscript.echo "Number of lpr mon ports on the source server " & iLprCount
wscript.echo "Number of tcp ports added to the the destination server " & iTcpCount
ConvertAll = kErrorSuccess
end function
'
' Debug display helper function
'
sub DebugPrint(uFlags, strString)
if gDebugFlag = true then
if uFlags = kDebugTrace then
wscript.echo "Debug: " & strString
end if
if uFlags = kDebugError then
if Err <> 0 then
wscript.echo "Debug: " & strString & " Failed with " & Hex(Err)
end if
end if
end if
end sub
'
' Parse the command line into it's components
'
function ParseCommandLine(iAction, strSourceServer, strDestServer, strPort, strIPAddress)
on error resume next
DebugPrint kDebugTrace, "In the ParseCommandLine"
dim oArgs
dim strArg
dim iIndex
set oArgs = wscript.Arguments
iAction = kActionUnknown
iIndex = 0
while iIndex < oArgs.Count
select case oArgs(iIndex)
case "-a"
iAction = kActionAdd
case "-g"
iAction = kActionGet
case "-w"
iAction = kActionConvertAll
case "-i"
iIndex = iIndex + 1
strIPAddress = oArgs(iIndex)
case "-p"
iIndex = iIndex + 1
strPort = oArgs(iIndex)
case "-c"
iIndex = iIndex + 1
strSourceServer = oArgs(iIndex)
case "-d"
iIndex = iIndex + 1
strDestServer = oArgs(iIndex)
case "-?"
Usage(true)
exit function
case else
Usage(true)
exit function
end select
iIndex = iIndex + 1
wend
if Err.Number <> kErrorSuccess then
wscript.echo "Unable to parse command line, error 0x" & _
Hex(Err.Number) & " " & Err.Description
ParseCommandLine = kErrorFailure
else
ParseCommandLine = kErrorSuccess
end if
end function
'
' Display command usage.
'
sub Usage(bExit)
wscript.echo "Usage: portconv [-agw?][-p port][-c source server]"
wscript.echo " [-i ip][-d destination server]"
wscript.echo "Arguments:"
wscript.echo "-a - adds the equivalent tcp port for an lpr port"
wscript.echo "-g - for an IP address, gets the preferred device settings"
wscript.echo "-w - convert all"
wscript.echo "-p - port name"
wscript.echo "-c - source server name"
wscript.echo "-i - ip address of the device to get the settings of"
wscript.echo "-d - destination server name, where the port will be added"
wscript.echo ""
wscript.echo "Examples:"
wscript.echo "portconv -g -i 1.2.3.4"
wscript.echo "portconv -a -p 1.2.3.4:Queue -c \\server"
wscript.echo "portconv -a -p 1.2.3.4:Queue -c \\server -d \\dest"
wscript.echo "portconv -w -c \\server"
wscript.echo "portconv -w -c \\server -d \\dest"
wscript.echo "portconv -w -d \\dest"
if bExit <> 0 then
wscript.quit(1)
end if
end sub
'
' Determines which program is used to run this script.
' Returns true if the script host is cscript.exe
'
function IsHostCscript()
on error resume next
dim strFullName
dim strCommand
dim i, j
dim bReturn
bReturn = false
strFullName = WScript.FullName
i = InStr(1, strFullName, ".exe", 1)
if i <> 0 then
j = InStrRev(strFullName, "\", i, 1)
if j <> 0 then
strCommand = Mid(strFullName, j+1, i-j-1)
if LCase(strCommand) = "cscript" then
bReturn = true
end if
end if
end if
if Err <> 0 then
call wscript.echo("Error 0x" & hex(Err.Number) & " occurred. " & Err.Description _
& ". " & vbCRLF & "The scripting host could not be determined.")
end if
IsHostCscript = bReturn
end function